package designMode.strategyPattern;
//策略模式是一种行为型设计模式，它定义了一系列算法，并将每个算法封装起来，
// 使它们可以相互替换，让算法独立于使用它的客户端（调用方）而变化。
//很多情况下，我们代码里有大量的 if else、switch 等，
//可以通过使用策略模式，避免大量条件语句的使用，实现算法的分离和独立变化。
//它的主要目的是为了解耦多个策略，并方便调用方在针对不同场景灵活切换不同的策略。
//策略模式的特点:
//算法封装：将算法的实现与使用算法的代码分离，通过封装提高代码的灵活性和可扩展性。
//动态替换：可以在运行时选择和替换算法。
//遵循开闭原则：新增策略无需修改现有代码。

//策略模式的组成
//        策略接口（Strategy）：定义算法的通用接口。
//        具体策略（ConcreteStrategy）：实现具体的算法。
//        上下文类（Context）：持有策略接口的引用，调用具体策略的方法。
public class TestStrategy {
    public static void main(String[] args) {
        Context context = new Context();
        Strategy strategyA = new ConcreteStrategyA();
        Strategy strategyB = new ConcreteStrategyB();

        context.setStrategy(strategyA);
        context.executeStrategy(); // Output: Executing Strategy A

        context.setStrategy(strategyB);
        context.executeStrategy(); // Output: Executing Strategy B
    }
}
